package cmd

import (
	"context"
	"fmt"
	"github.com/spf13/cobra"
	"strconv"
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// pod 名称
var podGetName string

func init() {
	// 获取 Pod 的选项参数
	podGetCmd.Flags().StringVar(&podGetName, "name", "", "pod name")
}

// Pod 命令
var podRootCmd = cobra.Command{
	Use:   "pod",
	Short: "pod is used to manage kubernetes Pods",
}

// Pod Get 命令
var podGetCmd = cobra.Command{
	Use:   "get",
	Short: "get pod or pod list",
	Run: func(cmd *cobra.Command, args []string) {
		if namespace == "" {
			cmd.Help()
			return
		}

		// 创建 Kubernetes 客户端对象
		k8sClient, err := createK8SClient()
		if err != nil {
			fmt.Println("Err:", err)
			return
		}

		// 根据 podGetName 参数是否为空来决定显示单个 Pod 信息还是所有 Pod 信息
		listOption := metav1.ListOptions{}
		// 如果指定了 Pod Name，那么只获取单个 Pod 的信息
		if podGetName != "" {
			listOption.FieldSelector = fmt.Sprintf("metadata.name=%s", podGetName)
		}

		// 调用 List 接口获取 Pod 列表
		podList, err := k8sClient.CoreV1().Pods(namespace).List(context.Background(), listOption)
		if err != nil {
			fmt.Println("Err:", err)
			return
		}

		// 遍历 Pod List，显示 Pod 信息
		printFmt := "%-30s\t%-10s\t%-10s\t%-10s\t%s\n"
		fmt.Printf(printFmt, "NAME", "READY", "STATUS", "RESTARTS", "AGE")
		for _, pod := range podList.Items {
			// 计算 Container Ready 的数量
			containerAllCount := len(pod.Status.ContainerStatuses)
			containerReadyCount := 0
			for _, cs := range pod.Status.ContainerStatuses {
				if cs.State.Running != nil {
					containerReadyCount++
				}
			}

			// 打印输出
			fmt.Printf(printFmt, pod.Name,
				strconv.Itoa(containerReadyCount)+"/"+strconv.Itoa(containerAllCount),
				pod.Status.Phase,
				strconv.Itoa(int(pod.Status.ContainerStatuses[0].RestartCount)),
				time.Now().Sub(pod.Status.StartTime.Time).String())

		}
	},
}
